/**
 * Copyright &copy; 2012-2014 <a href="https://github.com/thinkgem/jeesite">JeeSite</a> All rights reserved.
 */
package com.thinkgem.jeesite.common.utils;

import java.text.MessageFormat;

import com.thinkgem.jeesite.common.config.Global;
import com.thinkgem.jeesite.common.http.HttpClientReq;

/**
 * Token工具类
 * @author fuxin
 * @version 2016-11-13
 */
public class TokenUtils {
	
	/** token缓存名 */
	private static final String CACHE_NAME = "tokenCache";
	/** token缓存前缀 */
	private static final String CACHE_KEY_TOKEN = "cache_token_";
	private static String APPID;
	private static String SECRET;

	/**
	 * 获取token，若获取失败则返回null<br>有效期7200秒
	 * @author fuxin
	 * @date 2017年11月11日 下午3:35:51
	 * @description 
	 *		TODO
	 * @return String / StringUtils.EMPTY
	 *
	 */
	public static String genToken(){
		if(StringUtils.isEmpty(APPID) || StringUtils.isEmpty(SECRET)){
			APPID = Global.getConfig("hbepi.appid", StringUtils.EMPTY);
			SECRET = Global.getConfig("hbepi.secret", StringUtils.EMPTY);
			if(StringUtils.isEmpty(APPID) || StringUtils.isEmpty(SECRET)){
				return StringUtils.EMPTY;
			}
		}
		//获取换成中token
		Object localToken = CacheUtils.get(CACHE_NAME, CACHE_KEY_TOKEN);
		if(localToken != null){
			return (String) localToken;
		}
		String tokenRefreshCheckAndAllotURL = Global.getConfig("tokenRefreshCheckAndAllotURL");
		tokenRefreshCheckAndAllotURL = MessageFormat.format(tokenRefreshCheckAndAllotURL, APPID, SECRET);
		String hbepiToken = HttpClientReq.httpClientPostJson(tokenRefreshCheckAndAllotURL, "");
		//将token存在缓存中，缓存超时7000秒
		if(StringUtils.isNotBlank(hbepiToken)){
			CacheUtils.put(CACHE_NAME, CACHE_KEY_TOKEN, hbepiToken);
		}
		return hbepiToken;
	}
	
	/**
	 * 手动清除token缓存
	 * @author fuxin
	 * @date 2017年11月11日 下午3:52:52
	 * @description 
	 *		TODO
	 *
	 */
	public static void clearToken(){
		CacheUtils.remove(CACHE_NAME, CACHE_KEY_TOKEN);
	}
	
	
	/**
	 * 验证
	 * @author fuxin
	 * @date 2017年11月11日 下午5:29:40
	 * @description 
	 *		TODO
	 * @param token
	 * @return
	 *
	 */
	public static boolean checkToken(String appid, String token){
		String localToken = (String) CacheUtils.get(CACHE_NAME, CACHE_KEY_TOKEN + appid, StringUtils.EMPTY);
		if(StringUtils.isNotBlank(localToken)){
			if(localToken.equals(token)){
				return true;
			}
		}
		return false;
	}
	
	/**
	 * 将token保存到缓存
	 * @author fuxin
	 * @date 2017年11月13日 下午4:48:31
	 * @description 
	 *		TODO
	 * @param appid
	 * @param token
	 * @return
	 *
	 */
	public static boolean saveToken(String appid, String token){
		try {
			CacheUtils.remove(CACHE_NAME, CACHE_KEY_TOKEN + appid);
			CacheUtils.put(CACHE_NAME, CACHE_KEY_TOKEN + appid, token);
		} catch (Exception e) {
			return false;
		}
		return true;
	}
    
}